package com.leetcode.sorts.arrays.double_point;

import java.util.Arrays;

/**
 * @Author: WuPeng
 * @Date: 2021/5/20 6:19 下午
 *
 * 027: 移除元素
 * 给你一个数组 nums和一个值 val，你需要 原地 移除所有数值等于val的元素，并返回移除后数组的新长度。
 * 不要使用额外的数组空间，你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
 * 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
 *
 * 说明:
 *      为什么返回数值是整数，但输出的答案是数组呢?
 *      请注意，输入数组是以「引用」方式传递的，这意味着在函数里修改输入数组对于调用者是可见的。
 *
 */
public class RemoveFromArray_027 {

    public static int remove(int[] nums, int target){
        int left=0, right=nums.length-1;
        while (left <= right){
            if (nums[left] != target){
                left++;
            }
            else {
                int tmp = nums[left];
                nums[left] = nums[right];
                nums[right] = tmp;
                right--;
            }
        }
        System.out.println(Arrays.toString(nums));
        return left;
    }

    public static void main(String[] args) {
        int[] nums = {0,1,2,2,3,0,4,2};
        int res = remove(nums, 2);
        System.out.println(res);
    }

}
